#ifndef JsFunctionH
#define JsFunctionH

#include"JsType.h"
/*
	JsValue.type = Object;
	JsObject->Value = JsFunction;
	函数元信息
*/

struct JsFunction {
	enum JsFunctionType{
		JS_FUNCTION_NATIVE, //预示着body为一个回调函数
		JS_FUNCTION_EVAL //预设着body为AST
	}type;
	int argc;
	char **argv;
	void *data; //存储的数据(AST, USER)
	JsFunctionFn fn; //指向具体的函数(EVAL, Standard)
	char *name;	/* optional function name */
	int sync;//是否是Sync函数
	JsLock syncLock;//函数-Sync锁
};

/****************************************************************************
									通用API
*****************************************************************************/
/*
	scope被拷贝为Object.scope的数值
	如果Scope == NULL 则使用Global
*/
struct JsObject* JsCreateStandardFunction(enum JsFunctionType type,int argc, 
		char** argv,void* data,JsFunctionFn fn,char* name,int sync,JsList scope);
#endif